#ifndef ENTREE_H
#define ENTREE_H

	#include <stdlib.h>
	#include <stdio.h>
	#include <string.h>
	
	#define FAUX 0
	#define VRAI 1

	#define ENTREE_TYPECTE_ENTIER 0
	#define ENTREE_TYPECTE_BOOL 1
	#define ENTREE_TYPECTE_CHAR 2
	#define ENTREE_TYPECTE_UNIT 3

	#define ENTREE_TYPEENTREE_CTE 0
	#define ENTREE_TYPEENTREE_FCT 1

	typedef struct {int type; int valeurIntBool; char * valeurChar;} valeurCte;
	typedef struct {char * nom; int typeEntree; int nbArg; int * typeArg; int typeRetour; valeurCte valeur; int idFantome;} entree;
	
	//renvoie un nouvel élément entree de type int
	entree nouvelleEntreeCteInt(char * nom, int valeur);
	//renvoie un nouvel élément entree de type bool
	entree nouvelleEntreeCteBool(char * nom, int valeur);
	//renvoie un nouvel élément entree de type char *
	entree nouvelleEntreeCteChar(char * nom, char * valeur);
	//renvoie un nouvel élément entree de type fonction
	entree nouvelleEntreeFct(char * nom, int nbArg, int * typeArg, int typeRetour);
	//renvoie un char * correspondant à la valeur de l'entrée
	char * entreeToString(entree x);
	//renvoie un char * "identifiant := valeur" pour les entrées de type constante (int, bool, char *)
	char * entreeConstanteToString(entree x);
	//renvoie un char * "typeRetour identifiant (typeArg, type Arg, type Arg, ...)" pour les entrées de type fonction
	char * entreeFonctionToString(entree x);
	//renvoie un char * correspondant au type passé en parametre (int, char * ou bool)
	char * entreeTypeCteToString(int type);
	
	/*
	 * un identifiant est fantome s'il a déjà été déclaré dans un bloc non parent
	*/
	

#endif
